//1.引入express
const express = require("express");

/*代理服务器*/
const cors = require("cors"); //引入cors

//代理模块，在目录下执行： npm i express-http-proxy
// const proxy = require("express-http-proxy"); //引入proxy代理

//2.创建服务器
const app = express();
/*长链接 */
const http = require("http");
const server = http.createServer(app);
const { Server } = require("socket.io");
//解决跨域问题
const io = new Server(server, {
  cors: {
    origin: "*",
  },
});
/* npm 安装并引入mysql包*/
var mysql = require("mysql");
// 创建连接
var connection = mysql.createConnection({
  host: "localhost",
  user: "root",
  // password:'0000',
  database: "zoom",
});
// 连接数据库(打开冰箱门)
connection.connect();

// 调用io.on()方法，监听客户端向socket.io服务端发起的websocket连接请求
// 一旦有客户端试图连接当前服务，将立即监听到该动作
// 连接建立成功后执行回调方法    socket就是websocket连接对象\
/**定义随机数rand */
const rand = (Math.random() * 2 - 1) / 10e4;
io.on("connection", socket => {
  console.log("来了个小b崽子" + socket.id);
  socket.on("textmsg", function (data) {
    console.log("客户端发送了信号准备更改数据库" + data);
    /*自调用接口开始更改数据库
    执行数据库操作(把大象放到冰箱)
    注意:无论是查询,修改,增加,还是删除,就在第一个参数里面写SQL语句即可
    修改
    */

    connection.query(
      "SELECT * FROM `zm_animal`",
      function (error, results, fields) {
        if (error) throw error;
        results.forEach((item, index) => {
          const rand1 = Math.floor(Math.random() * 100 + 60);
          // console.log("数据库数据", item.longitude);
          // console.log(connection);
          connection.query(
            "UPDATE zm_animal set longitude=?,latitude=?,rate=? where aid=? ",
            [item.longitude + rand, item.latitude + rand, rand1, index + 1],
            (err, r) => {
              if (r.affectedRows) {
                // console.log("修改成功!");
              }
            }
          );
        });
      }
    );

    /*if (/你瞅啥/.test(data)) {
      socket.emit("textmsg", "小b崽子瞅你咋地");
    } else if (/再瞅一下看看/.test(data)) {
      socket.emit("textmsg", "试试就逝世");
      io.emit("textmsg", "要不要进我的妙妙屋");*/

    socket.emit("textmsg", "数据库更新完毕");
  });
  //发消息给客户端
});

// // const mysql = require("mysql");
// const pool = mysql.createConnection({
//   host: "121.196.210.117", //MySQL服务器地址
//   port: 3306, //MySQL服务器端口号
//   user: "root", //数据库用户的用户名
//   password: "123456", //数据库用户密码
//   database: "hand-purchase", //数据库名称
//   connectionLimit: 20, //最大连接数
//   charset: "utf8", //数据库服务器的编码方式
// });
// // console.log(pool);
// // 创建服务器对象
// pool.connect();

/** */
//3.端口
app.listen(3000, () => {
  console.log("成功监听端口3000");
});
server.listen(3001, () => {
  console.log("websocket服务已启动，正在监听 *:3001");
});

/*代理*/
app.use(cors()); //添加cors模块，允许浏览器跨域访问
// app.use("/map/_AMapService", proxy("https://webapi.amap.com/maps?v=2.0&key=d397e24bab790d0ae2f259dc630a3058")); //添加代理转发设定:locohost:3000/map

app.all("*", (req, res, next) => {
  //响应头
  res.header("Access-Control-Allow-Origin", "*"); //所有人不安全
  //访问   控制     允许    来源
  //允许访问的来源有哪些：*
  // res.header("Access-Control-Allow-Origin", "http://127.0.0.1:3000");//指定：3000
  // res.header("Access-Control-Allow-Origin", "http://127.0.0.1:5500"); //指定5500
  next();
  //局限性：单个  or  全部
});

//7.静态托管
app.use(express.static("./public"));

//6.post插件引入
app.use(express.urlencoded({ extended: true }));

//4.引入自定义的商品路由器模块
const userRouter = require("./router/user.js");
app.use("/v1/user", userRouter);
//8.引入商品路由器并配置前缀
const proRouter = require("./router/product.js");
app.use("/v1/pro", proRouter);

// 引入用户操作路由
const userOperate = require("./router/userOption.js");
app.use("/v1/user", userOperate);

// 引入订单操作路由
const orderOperate = require("./router/product.js");
app.use("/v1/order", orderOperate);

// 引入动物操作路由
const animalOperate = require("./router/animal.js");
app.use("/v1/animal", animalOperate);

// 引入动物内容操作路由
const contentOperate = require("./router/content.js");
app.use("/v1/content", contentOperate);
// 引入动物内容操作路由
const content2Operate = require("./router/content2.js");
app.use("/v1/content", content2Operate);

// 引入图片操作路由
const imageOperate = require("./router/images.js");
app.use("/v1", imageOperate);

// 引入活动优惠内容操作路由
const activeOperate = require("./router/active.js");
app.use("/v1", activeOperate);

// 引入研学互动内容操作路由
const interactOperate = require("./router/interact.js");
app.use("/v1", interactOperate);
